package com.adafruit.bluefruit.le.connect.ui.keyboard;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.widget.EditText;
public class CustomEditTextFormatter {
public static void attachToEditText(final EditText editText, final int maxNumCharacters, final String separator, final int groupCharactersCount) {
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
String text = s.toString();
String newText = formatText(text, maxNumCharacters, separator, groupCharactersCount);
if (!text.equals(newText)) {
editText.setText(newText);
editText.setSelection(newText.length());
}
}
});
}
public static String formatText(String text, int maxNumCharacters, String separator, int groupCharactersCount) {
// Split the string into character groups
String mergedText = text.replaceAll(separator, "");
if (mergedText.length() > maxNumCharacters) {
mergedText = mergedText.substring(0, maxNumCharacters);
}
String[] characterGroups = splitStringEvery(mergedText, groupCharactersCount);
String newText = TextUtils.join(separator, characterGroups);
return newText;
}
private static String[] splitStringEvery(String s, int interval) { // based on: http://stackoverflow.com/questions/12295711/split-a-string-at-every-nth-position
int arrayLength = (int) Math.ceil(((s.length() / (double) interval)));
String[] result = new String[arrayLength];
int j = 0;
int lastIndex = result.length - 1;
for (int i = 0; i < lastIndex; i++) {
result[i] = s.substring(j, j + interval);
j += interval;
}
if (lastIndex >= 0) {
result[lastIndex] = s.substring(j);
}
return result;
}
}